import pandas as pd
from sympy.solvers import solve
from sympy import Symbol
import plotly.graph_objs as go
import plotly.express as px
surface = 500000 #m^2
Q = 150 #m^3/s into zoozanaghe
#Qouts=[Q for i in range(13)]
b = 40 #m and 1V:1.5H
g = 9.81
# hydrograph 6hrs after flood ? #ravesh puls(!)
Time = [0.5 * i for i in range(13)]
Qs = [150, 175, 220, 300, 380,
375, 305, 235,200, 180,
162, 150, 150]
df = pd.DataFrame({'zaman(hr)': Time,
'debi_voroodi(m^3/s)': Qs})
''',
'debi_khorooji(m^3/s)': Qouts})'''
df = df.transpose()
df
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| zaman(hr) | 0.0 | 0.5 | 1.0 | 1.5 | 2.0 | 2.5 | 3.0 | 3.5 | 4.0 | 4.5 | 5.0 | 5.5 | 6.0 |
| debi_voroodi(m^3/s) | 150.0 | 175.0 | 220.0 | 300.0 | 380.0 | 375.0 | 305.0 | 235.0 | 200.0 | 180.0 | 162.0 | 150.0 | 150.0 |
import IPython.display as ID
fig = ID.Image("eq_solve.png")
ID.display(fig)
yc = 1.09
A = lambda y: 1.5*y**2 + 40 * y
T= lambda y: b + 3 * y
D = lambda y: A(y) / T(y)
Hc = yc + (D(yc)/2)
Hc
1.6144066327709732
Heads = [Hc, 2, 2.5, 3, 2.5, 4]
#----------------------------------------------------------------
Ys = []
for i in Heads:
y = Symbol('y')
javab = solve(y + (D(y)/2) - i,y)
Ys.append(float(javab[1]))
#----------------------------------------------------------------
Vs = [(g * i)**0.5 for i in Ys]
#----------------------------------------------------------------
Q_out = []
for i in range(len(Ys)):
area = A(Ys[i])
speed = Vs[i]
Q_out.append(area*speed)
#----------------------------------------------------------------
Vol = []
V = 0
Vol.append(V)
for i in range(len(Heads)):
try:
H1 = Heads[i]
H2 = Heads[i+1]
V = (surface * (H2 - H1)) + V
Vol.append(V)
except:
pass
#----------------------------------------------------------------
VperdeltaT = [(i / (0.5 * 60 * 60)) for i in Vol]
#----------------------------------------------------------------
N = []
for i in range(len(Q_out)):
O2vom = Q_out[i] / 2
n = O2vom + VperdeltaT[i]
N.append(n)
df1 = pd.DataFrame({'Heads': Heads, 'Y(c)': Ys, 'V(c)': Vs,
"Q out": Q_out, 'V': Vol, "V / DT": VperdeltaT, "N": N})
df1
| Heads | Y(c) | V(c) | Q out | V | V / DT | N | |
|---|---|---|---|---|---|---|---|
| 0 | 1.614407 | 1.090000 | 3.270000 | 148.399630 | 0.000000e+00 | 0.000000 | 74.199815 |
| 1 | 2.000000 | 1.354141 | 3.644740 | 207.444723 | 1.927967e+05 | 107.109269 | 210.831630 |
| 2 | 2.500000 | 1.698659 | 4.082137 | 295.034500 | 4.427967e+05 | 245.998158 | 393.515408 |
| 3 | 3.000000 | 2.045338 | 4.479371 | 394.581598 | 6.927967e+05 | 384.887046 | 582.177846 |
| 4 | 2.500000 | 1.698659 | 4.082137 | 295.034500 | 4.427967e+05 | 245.998158 | 393.515408 |
| 5 | 4.000000 | 2.744762 | 5.189038 | 628.345991 | 1.192797e+06 | 662.664824 | 976.837820 |
px.line(x = N, y = Q_out)
import IPython.display as ds
ds.Image('soal2_fited.png')
import numpy as np
x = np.array(df1.N)
y = np.array(Q_out)
m, b = np.polyfit(x, y, 1)
m, b
(0.5352112294358141, 93.44308191158399)
O = lambda N: m * N + b
meanI = []
for i in range(len(Qs)):
try:
I1 = Qs[i]
I2 = Qs[i+1]
meanI.append((I2 + I1) / 2)
except:
pass
#----------------------------------------------------------------
O0 = Qs[0]
N1 = N0 = O0 / 2
Os = [O0]
Ns = []
dN = meanI[0] - O0
#----------------------------------------------------------------
for i in range(len(meanI)):
Ibar = meanI[i]
dN = Ibar - O0
N1 = N1 + dN
O0 = O(N1)
Os.append(O0)
px.line(Os)
final = pd.DataFrame({"debi khorooji" : Os, 'debi voroodi': Qs})
final
| debi khorooji | debi voroodi | |
|---|---|---|
| 0 | 150.000000 | 150 |
| 1 | 140.274064 | 175 |
| 2 | 170.902028 | 220 |
| 3 | 218.588263 | 300 |
| 4 | 283.569188 | 380 |
| 5 | 333.842013 | 375 |
| 6 | 337.137837 | 305 |
| 7 | 301.204913 | 235 |
| 8 | 256.405103 | 200 |
| 9 | 220.864346 | 180 |
| 10 | 194.176388 | 162 |
| 11 | 173.743957 | 150 |
| 12 | 161.035924 | 150 |
fig = go.Figure()
fig.add_trace(go.Scatter(x = Time, y = Qs, name = 'Q_in'))
fig.add_trace(go.Scatter(x = Time, y = Os, name = 'Q_out'))
fig.update_layout(
title="Hydrograph",
xaxis_title="zaman(s)",
yaxis_title="debi(m^s/s",
legend_title="jaryan",
font=dict(
family="Courier New, monospace",
size=18,
color="RebeccaPurple"
)
)